// 把函数赋值给变量
let func = function(){
    console.log('把函数赋值给变量')
}
// func()
const r = func
console.log(r, func)
console.log(r===func)

// 高阶函数 - 函数作为参数
/**
 * forEach
 * @param {*} array 
 * @param {*} fn 
 */
function forEach(array, fn) {
    for(let i = 0; i<array.length; i++){
        fn(array[i])
    }
}
// forEach test
// let arr = [4,7,45,22]
// forEach(arr, function (item) {
//     console.log(item)
// })

/**
 * 
 * @param {*} array 
 * @param {*} fn 
 */
function filter(array, fn) {
    let results = []
    for (let i = 0; i<array.length; i++) {
        if(fn(array[i])){
            results.push(array[i])
        }       
    }
    return results
}
// let arr = [0, 12, 15, 88, 4]
// const list = filter(arr, function (item) {
//     return item % 5 === 0
// })
// console.log(list)


// 高阶函数 - 函数作为返回值
// 闭包
function mackFn () {
    let msg = 'hello husky'
    return function () {
        console.log(msg) // 内部函数引用外部函数成员，当外部函数执行后，变量不会被释放
    }
}
// const fun = mackFn()
// fun() 
// mackFn(1)() //第二个括号代表mackFun中返回的函数




